package com.ruoyi.project.dj.mapper;

import com.ruoyi.project.dj.domain.DjStudyRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 学习记录Mapper接口
 *
 * @author ruoyi
 * @date 2025-09-15
 */
public interface DjStudyRecordMapper
{
    /**
     * 查询学习记录
     *
     * @param id 学习记录ID
     * @return 学习记录
     */
    public DjStudyRecord selectDjStudyRecordById(Long id);

    /**
     * 查询学习记录列表
     *
     * @param djStudyRecord 学习记录
     * @return 学习记录集合
     */
    public List<DjStudyRecord> selectDjStudyRecordList(DjStudyRecord djStudyRecord);

    /**
     * 新增学习记录
     *
     * @param djStudyRecord 学习记录
     * @return 结果
     */
    public int insertDjStudyRecord(DjStudyRecord djStudyRecord);

    /**
     * 修改学习记录
     *
     * @param djStudyRecord 学习记录
     * @return 结果
     */
    public int updateDjStudyRecord(DjStudyRecord djStudyRecord);

    /**
     * 删除学习记录
     *
     * @param id 学习记录ID
     * @return 结果
     */
    public int deleteDjStudyRecordById(Long id);

    /**
     * 批量删除学习记录
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteDjStudyRecordByIds(Long[] ids);

    /**
     * 根据用户ID、资源类型和资源ID查询学习记录
     *
     * @param memberId 党员ID
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @return 学习记录
     */
    public DjStudyRecord selectDjStudyRecordByMemberAndResource(@Param("memberId") Long memberId, 
                                                                @Param("resourceType") String resourceType, 
                                                                @Param("resourceId") Long resourceId);

    /**
     * 更新学习时长和位置
     *
     * @param memberId 党员ID
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @param durationIncrement 增加的时长
     * @param lastPosition 最后位置
     * @return 结果
     */
    public int updateStudyDurationAndPosition(@Param("memberId") Long memberId, 
                                              @Param("resourceType") String resourceType, 
                                              @Param("resourceId") Long resourceId,
                                              @Param("durationIncrement") Integer durationIncrement,
                                              @Param("lastPosition") Integer lastPosition);
}